package indexPack;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;

import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.document.Field.Index;
import org.apache.lucene.document.Field.Store;
import org.apache.lucene.document.Field.TermVector;
import org.apache.lucene.index.CorruptIndexException;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.store.SimpleFSDirectory;

public class IndexController {

	private IndexWriter index;

	public IndexController(File indexDir,File dataDir, Analyzer analyzer, boolean createIndex) throws IOException{
		this.index = makeIndex(indexDir, dataDir,analyzer, createIndex);
}
	
	@SuppressWarnings("deprecation")
	private IndexWriter makeIndex(File indexDir,File dataDir, Analyzer analyzer,boolean createIndex) throws IOException{
		if (!dataDir.exists() || !dataDir.isDirectory()) {
			throw new IOException(dataDir + ", no existe o no es un directorio");
		}
		index = new IndexWriter(
				// Pueden ser directorios virtuales basado en RAM, BD o Archivos.
				new SimpleFSDirectory(indexDir), 
				// El analizador de texto por defecto.
				analyzer, 				
				// Deseo crear el indice.
				createIndex,
				// No me preocupa limitar el tamaNo de los campos.
				IndexWriter.MaxFieldLength.UNLIMITED);
		//no se q hace esto, averiguar
		index.setUseCompoundFile(false);
		return index;
	}
	public IndexWriter getIndex(){
		return index;
	}
	public void doIndexFile(IndexWriter index, File file) throws IOException{
		Document document = null;
		String path = null;
		String name = null;
		// Si no es un archivo oculto
		// si existe
		// y puedo leerlo
		if (!file.isHidden() && file.exists() && file.canRead()) {
			System.out.println("Indexando: " + file.getCanonicalPath());
			//System.out.println("nombre: " + file.getName());
			document = new Document ();
			// Agrega un campo de texto indexado pero no almacenado.
			document.add(new Field("contenido", new FileReader (file),TermVector.WITH_POSITIONS_OFFSETS));
			// Es almacenado pero no indexado, sirve viene como parte de los resultados
			// pero no se desea hacer busquedas por el nombre del archivo o la direccion del mismo.
		
			document.add(new Field ("direccion",file.getCanonicalPath(), Store.YES, Index.ANALYZED));
			document.add(new Field ("nombre",file.getName(), Store.YES, Index.ANALYZED));
			// Finalmente agrego el archivo al indice.
			index.addDocument(document);
	}}
	
	
	
	public void cerrar() throws CorruptIndexException, IOException{
		index.close();
	}
	public void optimizar() throws CorruptIndexException, IOException{
		index.optimize();
	}
	
}
